package com.br.aiops.rule;

import com.alibaba.fastjson.annotation.JSONField;
import com.googlecode.aviator.Expression;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.regex.Pattern;

/**
 * 规则实体类，定义了规则中的字段
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Rule implements Serializable {
    /**
     * 规则id，唯一标识
     */
    private Long id;

    /**
     * 正则表达式，每个service下的正则表达式需要唯一；如果为空或者为*，则代表匹配全部
     */
    private String regex;

    /**
     * 匹配语句，支持<、>、!=、>=、<=、 &&、||，如：$1 > 10 && $2 != 30
     */
    private String expr;

    /**
     * 判断方式：按时间还是次数
     */
    private Integer judgeType;

    /**
     * 持续时长，单位分钟
     */
    private Integer duration;

    /**
     * 次数
     */
    private Integer times;

    /**
     * 阶梯类型
     */
    private Integer ladderType;

    /**
     * 持续时间阶梯数
     */
    private String durStep;

    /**
     * 最大累计次数
     */
    private String timesStep;

    /**
     * 恢复次数，标识在duration内告警次数低于该次数，则告警恢复
     */
    private Integer resumeTimes;

    /**
     * service
     */
    private String service;

    /**
     * serviceId
     */
    private Long serviceId;

    /**
     * errorCode
     */
    private String errorCode;

    /**
     * 告警级别
     */
    private String alertLevel;

    /**
     * sendType
     */
    private String sendType;

    /**
     * uuid
     */
    private String ruleUuid;

    /**
     * 告警类型：1、告警；2、通知
     */
    private Integer alertType;

    /**
     * 环境
     */
    private String env;

    /**
     * 子环境
     */
    private String subEnv;

    /**
     * 异常描述
     */
    private String errorDesc;

    /**
     * 预案说明
     */
    private String repairSteps;

    /**
     * 备注
     */
    private String remark;

    /**
     * 接收者类型；0：按人员发送；1：按组发送
     */
    private Integer receiverType;

    /**
     * 自定义模板：邮件
     */
    private String template;

    /**
     * 自定义模板：微信
     */
    private String wechatTemplate;

    /**
     * 自定义模板：短信
     */
    private String smsTemplate;

    /**
     * 提前编译pattern
     */
    private Pattern pattern;

    /**
     * 提前编译表达式
     */
    @JSONField(serialize = false)
    private Expression expression;
}
